@994495jj
2017-06-02T12:56:09.000000Z
字数 2966
阅读 899
201706 (ACM)hanabi组队训练 (ACM)构造 (ACM)思维 (ACM)动态规划
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;double dp1[55][55][55][55];double dp2[55][55][55][55];double ans[5];int _[5];int main() {int n,k;while(~scanf("%d%d",&n,&k)) {///initmemset(dp1,0,sizeof(dp1));memset(dp2,0,sizeof(dp2));memset(ans,0,sizeof(ans));memset(_,0,sizeof(_));///readint s=0;for(int i=0;i<n;++i) {scanf("%d",_+i);s=s+_[i];}///solvedp1[_[0]][_[1]][_[2]][_[3]]=1;for(int i=s;i<k;++i) {//更新i+1for(int a=_[0];a+_[4]<=i;++a) {for(int b=_[1];a+b+_[4]<=i;++b) {for(int c=_[2];a+b+c+_[4]<=i;++c) {for(int d=_[3];a+b+c+d+_[4]<=i;++d) {dp2[a+1][b][c][d]+=dp1[a][b][c][d]*a/i;dp2[a][b+1][c][d]+=dp1[a][b][c][d]*b/i;dp2[a][b][c+1][d]+=dp1[a][b][c][d]*c/i;dp2[a][b][c][d+1]+=dp1[a][b][c][d]*d/i;dp2[a][b][c][d]+=dp1[a][b][c][d]*(i-a-b-c-d)/i;} } } }for(int a=_[0];a+_[4]<=i+1;++a) {for(int b=_[1];a+b+_[4]<=i+1;++b) {for(int c=_[2];a+b+c+_[4]<=i+1;++c) {for(int d=_[3];a+b+c+d+_[4]<=i+1;++d) {dp1[a][b][c][d]=dp2[a][b][c][d];dp2[a][b][c][d]=0;} } } }}for(int a=_[0];a+_[4]<=k;++a) {for(int b=_[1];a+b+_[4]<=k;++b) {for(int c=_[2];a+b+c+_[4]<=k;++c) {for(int d=_[3];a+b+c+d+_[4]<=k;++d) {int e=k-a-b-c-d;int Max=max(a,max(b,max(c,max(d,e))));int cnt=0;if(Max==a) ++cnt;if(Max==b) ++cnt;if(Max==c) ++cnt;if(Max==d) ++cnt;if(Max==e) ++cnt;if(Max==a) ans[0]=ans[0]+dp1[a][b][c][d]/cnt;if(Max==b) ans[1]=ans[1]+dp1[a][b][c][d]/cnt;if(Max==c) ans[2]=ans[2]+dp1[a][b][c][d]/cnt;if(Max==d) ans[3]=ans[3]+dp1[a][b][c][d]/cnt;if(Max==e) ans[4]=ans[4]+dp1[a][b][c][d]/cnt;} } } }for(int i=0;i<n;++i) printf("pub %d: %.2f %\n",i+1,ans[i]*100);}return 0;}
#include<cstdio>#include<cstring>#include<vector>#include<algorithm>#include<iostream>using namespace std;#define de(x) cout<<#x<<" = "<<x<<endl;const int N=1100;char s[N][N];bool del[N],vis[N];vector<int> tt;int n;void print(int x,int y) {printf("%d %d\n",x+1,y+1);vis[x]=vis[y]=0;if(s[x][y]=='1') del[y]=1;else del[x]=1;}void dfs(int x) {if(x==1) return ;///inittt.clear();memset(vis,0,sizeof(vis));///set visfor(int i=0;i<n;++i) {if(!del[i]) vis[i]=1;}///t1 & t0for(int i=0;i<n;++i) {if(!vis[i]||s[i][0]=='0') continue;bool f=1;for(int j=0;j<n;++j) {if(!vis[j]||s[j][i]=='0'||s[j][0]=='1') continue;print(i,j);f=0;break;}if(f) tt.push_back(i);}///t0 & t0int sz=tt.size();for(int i=0;i+1<sz;i+=2) print(tt[i],tt[i+1]);///1 & Xfor(int i=1;i<n;++i) {if(vis[i]&&s[0][i]=='1') {print(0,i);break;}}///X & Xint cnt=1,pre=0;for(int i=0;i<n;++i) {if(vis[i]) {++cnt;if(cnt&1) print(pre,i);pre=i;}}///dfs(x/2);}int main() {while(~scanf("%d",&n)) {///initmemset(del,0,sizeof(del));///readfor(int i=0;i<n;++i) scanf("%s",s[i]);///solvedfs(n);}return 0;}