結果
問題 | No.506 限られたジャパリまん |
ユーザー |
![]() |
提出日時 | 2017-04-12 01:30:18 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 72 ms / 2,000 ms |
コード長 | 1,407 bytes |
コンパイル時間 | 534 ms |
コンパイル使用メモリ | 67,504 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-28 04:08:31 |
合計ジャッジ時間 | 1,738 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 25 |
ソースコード
#include <cstdio>#include <iostream>#include <cstdlib>using namespace std;#define REP(i,n) for (int i=0;i<(n);i++)#define MOD 1000000007int add(int);bool friends[35]={};int main(){int H,W,K,P;int x[35],y[35];char N[21][12];long long int dp[35][35]={};long long int max=0;int e=0;bool max_friends[35]={};cin >> H >> W >> K >> P;REP(i,K){cin>>x[i]>>y[i]>>N[i];}while(friends[K]==0){REP(i,K){e+=friends[i];}if(e<=P){REP(i,H+1){REP(j,W+1){dp[i][j]= -1;}}dp[0][0]=1;REP(i,K){if(friends[i]==0){dp[x[i]][y[i]] = 0;}}REP(i,H+1){REP(j,W+1){if(dp[i][j]==-1){if(i==0 && dp[0][j-1]!=0){dp[i][j]=1;}else if(j==0 && dp[i-1][0]!=0){dp[i][j]=1;}else if(i!=0 && j!=0){dp[i][j] = dp[i-1][j]+dp[i][j-1];}else{dp[i][j]=0;}}}}//REP(i,H+1){REP(j,W+1){cout<<dp[i][j]<<" ";}cout<<endl;}if(dp[H][W]>max){max=dp[H][W];REP(i,K){max_friends[i]=friends[i];}//cout << max << endl;}}e=0;add(0);}cout << max % MOD <<endl;REP(i,K){if(max_friends[i]==1){cout<<N[i]<<endl;}}return 0;}int add(int a){if(friends[a]==0){friends[a]=1;}else{friends[a]=0;add(a+1);}return 0;}